home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 280_01 / overstrk.c < prev    next >
Text File  |  1989-01-11  |  3KB  |  123 lines

  1. /* [OVERSTRK.C of JUGPDS Vol.46] */
  2. /*
  3. *****************************************************************
  4. *                                *
  5. *    Written by  Hakuo Katayose (JUG-CP/M No.179)        *
  6. *            49-114 Kawauchi-Sanjuunin-machi        *
  7. *            Sendai, Miyagi 980                          *
  8. *            Phone: 0222-61-3219                *
  9. *                                *
  10. *       Modifird by Toshiya Oota   (JUG-CPM No.10)              *
  11. *                   Sakae ko-po 205                 *
  12. *            5-19-6 Hosoda                *
  13. *            Katusikaku Tokyo 124            *
  14. *                                *
  15. *        for MS-DOS Lattice C V3.1J & 80186/V20/V30    *
  16. *                                *
  17. *    Compiler Option: -ccu -k0(1) -ms -n -v -w        *
  18. *                                *
  19. *    Edited & tested by Y. Monma (JUG-CP/M Disk Editor)    *
  20. *            &  T. Ota   (JUG-CP/M Sub Disk Editor)    *
  21. *                                *
  22. *****************************************************************
  23. */
  24.  
  25. /* Library functions for Software Tools */
  26.  
  27. #include "stdio.h"
  28. #include "dos.h"
  29. #include "ctype.h"
  30. #include "tools.h"
  31. #include "toolfunc.h"
  32.  
  33. /* overstrike - convert backspaces into multiple lines */
  34.  
  35. int    cr_flag;
  36.  
  37. void main(argc, argv)
  38. int    argc;
  39. char     **argv;
  40. {
  41. FILE    *fp;
  42. void overstrik();
  43.  
  44. /*    if (wildexp(&argc,&argv) == ERROR)    /* Can't Compile LC-C */
  45.         error("OVR901 Wildexp overflow");  */
  46.     cr_flag = OFF;
  47.     if (argc == 1)
  48.         overstrik(STDIN);
  49.     else
  50.         while (--argc > 0)
  51.             if ((fp=fopen(*++argv, "r")) == NULL) {
  52.                   fprintf(STDERR, "OVR902 Can't open %s\n", *argv);
  53.                   exit(1);
  54.                   }
  55.             else {
  56.                 overstrik(fp);
  57.                 fclose(fp);
  58.                 }
  59. }
  60.  
  61.  
  62. #define    SKIP    ' '
  63. #define    NOSKIP    '+'
  64. #define    FF    '1'
  65.  
  66. void overstrik(fp)
  67. FILE    *fp;
  68. {
  69. int    c, col, newcol;
  70. void    putch();
  71.  
  72.     for (col = 1; ; col = (c == NEWLINE) ? 1 : col + 1) {
  73.         newcol    = col;
  74.         while ((c = getc(fp)) == BACKSPACE)
  75.             newcol = max(newcol-1, 1);
  76.         if (newcol < col) {
  77.             putch(col,NEWLINE);
  78.             putch(col,NOSKIP);
  79.             for (col = 1; col <= newcol; col++)
  80.                 putch(col,BLANK);
  81.             /******************************/
  82.             /*******  !! Caution !!  ******/
  83.             /* First BLANK Not Printed!   */
  84.             /* Look at putch() line 23&24 */
  85.             /******************************/
  86.         }
  87.         else if (col == 1 && c != EOF && c != CPMEOF)
  88.             putch(col,SKIP);
  89.         if (c == EOF || c == CPMEOF) {
  90.             putch(col,CPMEOF);
  91.             break;
  92.         }
  93.         putch(col,c);
  94.     }
  95. }
  96.  
  97.  
  98. void putch(col,c)
  99. int  col,c;
  100. {
  101.  
  102.     if (cr_flag == ON) {
  103.         cr_flag = OFF;
  104.         if (c == NEWLINE) {
  105.             putchar(NEWLINE);
  106.             cr_flag = ON;
  107.         }
  108.         else if (c == NOSKIP)
  109.             putchar(CRETURN);
  110.         else if (c == SKIP)
  111.             putchar(NEWLINE);
  112.         else if (c == FF)
  113.             putchar(FORMFEED);
  114.         else
  115.             putchar(c);
  116.     } else if (c == NEWLINE) {
  117.         putchar(CRETURN);
  118.         cr_flag = ON;
  119.     } else
  120.         if(col !=1 || c != SKIP)
  121.             putchar(c);
  122. }
  123.